package it.appcatalogobase;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;

public class ProdottoDataSource {
    // Database fields
    private SQLiteDatabase database;
    private CatalogoOpenHelper dbHelper;
    private String[] allColumns = { CatalogoOpenHelper.COLUMN_ID_PR, CatalogoOpenHelper.COLUMN_NAME_PR, CatalogoOpenHelper.COLUMN_DES_PR, CatalogoOpenHelper.COLUMN_CAT_PR, CatalogoOpenHelper.COLUMN_IMG_PR, CatalogoOpenHelper.COLUMN_MOD_PR, CatalogoOpenHelper.COLUMN_COL_PR };
    private Context context;

    public ProdottoDataSource(Context context) {
	dbHelper = new CatalogoOpenHelper(context);
	this.context = context;
    }

    public void open() throws SQLException {
	database = dbHelper.getWritableDatabase();
    }

    public void close() {
	dbHelper.close();
    }

    public Prodotto createProdotto(String prodotto, String descrizione, String categoria, String img, String descrizioneShort, String color) {
	ContentValues values = new ContentValues();
	values.put(CatalogoOpenHelper.COLUMN_NAME_PR, prodotto);
	values.put(CatalogoOpenHelper.COLUMN_DES_PR, descrizione);
	values.put(CatalogoOpenHelper.COLUMN_CAT_PR, categoria);
	values.put(CatalogoOpenHelper.COLUMN_IMG_PR, img);
	values.put(CatalogoOpenHelper.COLUMN_DESH_PR, descrizioneShort);
	values.put(CatalogoOpenHelper.COLUMN_COL_PR, color);
	long insertId = database.insert(CatalogoOpenHelper.DICTIONARY_TABLE_NAME_PRODOTTI, null, values);
	Cursor cursor = database.query(CatalogoOpenHelper.DICTIONARY_TABLE_NAME_PRODOTTI, allColumns, CatalogoOpenHelper.COLUMN_ID_PR + " = " + insertId, null, null, null, null);
	cursor.moveToFirst();
	Prodotto newProdotto = cursorToProdotto(cursor);
	cursor.close();
	return newProdotto;
    }

    public Prodotto createProdotto(long id, String prodotto, String descrizione, String categoria, String img, String descrizioneShort, String color) {
	ContentValues values = new ContentValues();
	values.put(CatalogoOpenHelper.COLUMN_ID_PR, id);
	values.put(CatalogoOpenHelper.COLUMN_NAME_PR, prodotto);
	values.put(CatalogoOpenHelper.COLUMN_DES_PR, descrizione);
	values.put(CatalogoOpenHelper.COLUMN_CAT_PR, categoria);
	values.put(CatalogoOpenHelper.COLUMN_IMG_PR, img);
	values.put(CatalogoOpenHelper.COLUMN_DESH_PR, descrizioneShort);
	values.put(CatalogoOpenHelper.COLUMN_COL_PR, color);
	SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	Date date = new Date();
	values.put(CatalogoOpenHelper.COLUMN_MOD_PR, dateFormat.format(date));

	long insertId = database.insert(CatalogoOpenHelper.DICTIONARY_TABLE_NAME_PRODOTTI, null, values);
	Cursor cursor = database.query(CatalogoOpenHelper.DICTIONARY_TABLE_NAME_PRODOTTI, allColumns, CatalogoOpenHelper.COLUMN_ID_PR + " = " + insertId, null, null, null, null);
	cursor.moveToFirst();
	Prodotto newProdotto = cursorToProdotto(cursor);
	cursor.close();
	return newProdotto;
    }

    public void deleteProdotto(Prodotto pr) {
	long id = pr.getId();
	System.out.println("Prodotto deleted with id: " + id);
	database.delete(CatalogoOpenHelper.DICTIONARY_TABLE_NAME_PRODOTTI, CatalogoOpenHelper.COLUMN_ID_PR + " = " + id, null);
    }

    public void deleteProdotti() {
	database.delete(CatalogoOpenHelper.DICTIONARY_TABLE_NAME_PRODOTTI, null, null);
    }

    public List<Prodotto> getAllProdotti() {
	List<Prodotto> prodotti = new ArrayList<Prodotto>();

	Cursor cursor = database.query(CatalogoOpenHelper.DICTIONARY_TABLE_NAME_PRODOTTI, allColumns, null, null, null, null, null);

	cursor.moveToFirst();
	while (!cursor.isAfterLast()) {
	    Prodotto prodotto = cursorToProdotto(cursor);
	    prodotti.add(prodotto);
	    cursor.moveToNext();
	}
	// make sure to close the cursor
	cursor.close();
	return prodotti;
    }

    public List<Prodotto> getAllProdottiFromCat(String cat) {
	List<Prodotto> prodotti = new ArrayList<Prodotto>();
	// CategoriaDataSource dCat = new CategoriaDataSource(context);
	// Categoria cat = dCat.getCategoria(id);
	Cursor cursor = database.query(CatalogoOpenHelper.DICTIONARY_TABLE_NAME_PRODOTTI, allColumns, "categoria='" + cat + "'", null, null, null, null);

	cursor.moveToFirst();
	while (!cursor.isAfterLast()) {
	    Prodotto prodotto = cursorToProdotto(cursor);
	    prodotti.add(prodotto);
	    cursor.moveToNext();
	}
	// make sure to close the cursor
	cursor.close();
	return prodotti;
    }

    public Prodotto getProdotto(Long id) {
	// List<Categoria> categorie = new ArrayList<Categoria>();

	Cursor cursor = database.query(CatalogoOpenHelper.DICTIONARY_TABLE_NAME_PRODOTTI, allColumns, CatalogoOpenHelper.COLUMN_ID_PR + "=" + id, null, null, null, null);
	if (cursor.getCount() > 0) {
	    cursor.moveToFirst();
	    // while (!cursor.isAfterLast()) {
	    Prodotto pr = cursorToProdotto(cursor);
	    // categorie.add(categoria);
	    cursor.moveToNext();
	    // }
	    // make sure to close the cursor
	    cursor.close();
	    return pr;
	} else
	    return null;
    }

    public void deleteProdottoFromId(Long id) {
	database.delete(CatalogoOpenHelper.DICTIONARY_TABLE_NAME_PRODOTTI, CatalogoOpenHelper.COLUMN_ID_PR + "=" + id, null);
    }

    private Prodotto cursorToProdotto(Cursor cursor) {
	Prodotto prodotto = new Prodotto();
	prodotto.setId(cursor.getLong(0));
	prodotto.setNome(cursor.getString(1));
	prodotto.setDescrizione(cursor.getString(2));
	prodotto.setCategoria(cursor.getString(3));
	prodotto.setImmagine(cursor.getString(4));
	prodotto.setDataMod(cursor.getString(5));
	prodotto.setColori(cursor.getString(6));

	// prodotto.setDescrizioneShort(cursor.getString(5));
	return prodotto;
    }
}
